第9章 代理与反射
第九章,代理与反射
注意事项
- Proxy.prototype === undefined
- Proxy为完全断层更新,不可转换成低版本代码
基本写法及其概念
基础写法
之所以说 receiver 一般是代理对象,是因为以下情况。
可撤销代理
反射
Reflect 是全局对象,一般对象上的方法他也有,不同的是其他方法报错,他不报错,取而代之的是他会返回状态标记,代表此次操作执行是否成功
常用的有 set,get,has,deleteProperty,ownKeys
proxy this 指向问题
可以 return trapTarget[property].call(trapTarget)
捕获不变式
对于捕获器来说,每个处理函数都有不同的返回规则,这个规则就叫捕获不变式。各种常用处理函数的捕获不变式规则如下:
我并没有写完,用到再去查即可,因为在正常使用的对象情况下,大部分都如常规预料的一般。不一样的一般都是不可配置,不可写,不可扩展所引起的。
书中有这样一句话:对于在代理对象上执行的任何一种操作,只会有一个捕获处理程序被调用,不会存在重复捕获的情况。
大部分确实如此,但是经实验,赋值操作会触发 set 和 defineProperty 两种处理函数
另外,书中这部分内容我在写代码测试时,多处与预期结果不一致 TODO
应用
数据劫持:上述代码
隐藏属性
对外暴露代理对象,那么在通过代理对象访问需要隐藏的属性时不返回即可
属性验证
赋值时,根据合法类型才给予通过
函数与构造函数参数验证
...